/**
 * Created by oneminute on 7/16/14.
 */

var lz = require("../lib/utils/modules")();

exports = module.exports = function (_req, _res, _next) {
    lz.Logger.debug("filter: 执行过滤: ", _req.path, _req.query);

    // 请求过滤函数，所有的用户请求，都会先来这儿。
    var uid = _req.query.uid;

    function createTempUser() {
        var uid = lz.Utils.getUUID("t_");
        lz.Logger.debug("filter: 用户未上传uid。将自动创建临时uid。", uid);
        _req.query.uid = uid;
        _next();
    };

    try {
        if (uid && uid.length > 0) {
            uid = lz.Utils.decrypt(uid);
            _req.query.uid = uid;
        }
    } catch (e) {
        lz.Logger.error("userFilter: 解码失败.", e.stack);
    }

    // 判断uid是否上传，若uid未上传则自动生成uid，用户为匿名用户。
    if (!uid) {
        createTempUser();
    } else {
        // 用户上传了uid，先从缓存中取回user对象。
        // 若user对象不存在，则从数据库中取回user对象。并缓存。

        lz.Logger.debug("filter: 用户已上传uid。", uid);
        var user = new lz.User({id: uid});
        user.load({method: "byId"}, function (_err, _user) {
            lz.Logger.debug("filter: 查找用户: %s", uid);
            if (_user) {
                _req.user = _user;
                lz.Logger.debug("filter: 用户请求: %s, %s", _req.user.id, _req.user.name);
                _next();
            } else {
                lz.Logger.debug("filter: 用户上传的uid已过期，将创建新的临时uid。");
                createTempUser();
            }
        });
    }
};
